/*
 *
 * 名称：五行
 * 功能：五行功能实现
 * 作者：清河张
 * 时间：2025.05.11
 *
 */

#ifndef WUXING_H
#define WUXING_H
#include "zhouqi.h"
#include "xiang4.h"

class WUXING_T : public CT//单个五行
{
public:
    enum EWUXING//五行
    {
        MUUU, HUOO, TUUU, JINN, SHUI,
        WX__ = INVALIDID
    };
    //默认构造函数
    WUXING_T();
    //全参数构造函数，默认属性配置
    WUXING_T(int id, int x4, const char* name, const char* yin, const char* yun);

    XIANG4 x4() const;//四象
    const char* yinname() const;//五音名
    const char* yunname() const;//五运名
private:
    struct {
        int _x4 : 3;//四象
        int _rev : 29;
    };

    const char* _yinname;//五音名
    const char* _yunname;//五运名
};


class WUXING5 : public ZHOUQI<WUXING_T, 5>//五行组
{
public:

    enum EWXGX//五行关系
    {
        BBANG, XIEEE, HAOOO, KEEEE, SHENG, //帮泄耗克生
    };

    class WXXQF_T : public CT//旺相休囚废
    {
    public:
        //默认构造函数
        WXXQF_T();
        //全参数构造函数，默认属性配置
        WXXQF_T(int id, const char* name);
    private:
    };
    typedef LIEBIAO<WXXQF_T,5>WXXQF;

    class WXXQS_T : public CT//旺相休囚死
    {
    public:
        //默认构造函数
        WXXQS_T();
        //全参数构造函数，默认属性配置
        WXXQS_T(int id, const char* name);
    private:

    };
    typedef LIEBIAO<WXXQS_T,5>WXXQS;

    class SHENGKE_T : public CT//帮泄耗克生
    {
    public:
        //默认构造函数
        SHENGKE_T();
        //全参数构造函数，默认属性配置
        SHENGKE_T(int id, const char* name);
    private:
    };
    typedef LIEBIAO<SHENGKE_T,5>SHENGKE;

    //默认构造函数
    WUXING5();
    //初始化到指定对象
    WUXING5(int id);
    //使用父类初始化
    WUXING5(const ZHOUQI<WUXING_T, 5>& parent);
    //生克
    SHENGKE shengke(WUXING5) const;
    //旺相休囚死
    WXXQS wxxqs(WUXING5) const;
    //旺相休囚废
    WXXQF wxxqf(WUXING5) const;
};

struct WUXINGX2 //双五行
{
    //初始化
    WUXINGX2(const WUXING_T wx1, const WUXING_T wx2);
    //名字合并
    const char* name() const;
private:
    const WUXING_T _wx1, _wx12;
    char _name[32];
};


#endif // WX5_H
